package metodos;

import java.util.ArrayList;


public class TablaValoresID3 {
    
    String valor;
    ArrayList<String> valoresClase;
    ArrayList<Integer> cantidades;
    
    public TablaValoresID3(String valor){
        valoresClase = new ArrayList<String>();
        cantidades = new ArrayList<Integer>();
        this.valor = valor;
    }
    
    public void Agregar(String valorClase){
        int indice = -1;
        for (int i = 0; i < valoresClase.size(); i++) {
            String aux = valoresClase.get(i);
            if(valorClase.equals(aux)){
                indice = i;
                break;
            }
        }
        if(indice != -1){
            int cant = cantidades.get(indice);
            cantidades.set(indice, cant + 1);
            return;
        }
        valoresClase.add(valorClase);
        cantidades.add(1);
    }

    public String getValor() {
        return valor;
    }
    
    public String getValorClase(int indice){
        return valoresClase.get(indice);
    }
    
    public int getCantidadValoresClase(){
        return valoresClase.size();
    }
    
    public int getCantidadTotal(){
        int total = 0;
        for (int i = 0; i < cantidades.size(); i++)
            total += cantidades.get(i);
        return total;
    }
    
    public int getCantidad(int indice){
        return cantidades.get(indice);
    }
    
    public float getEntropia(){
        float resultado = 0;
        for (int i = 0; i < cantidades.size(); i++) {
            float aux = getCantidad(i);
            aux = aux / getCantidadTotal();
            double log2 = Math.log(aux);
            log2 = log2/Math.log(2);
            resultado += aux * log2 * -1;
        }
        return resultado;
    }
    
}
